在武學中,當高手將內力修煉至極,便能發出「雷霆萬鈞」的一擊,速度之快,力量之猛,讓對手措手不及。在自動化測試的世界裡,隨著測試案例數量的增加,執行時間也會不斷拉長。今天,我們將學習如何運用平行化測試(Parallel Testing),讓測試套件能夠多線並行,像雷霆般瞬間完成所有驗證,大幅提升測試效率。
想像一下,你有 1000 個測試案例,每個執行需要 1 秒,總共需要 1000 秒(約 17 分鐘)。這對於開發流程來說,是一個巨大的瓶頸。特別是在 CI/CD 環境中,太長的測試時間會延遲程式碼部署,並且降低團隊的迭代速度。同時執行多個測試案例,它不是依序一個一個跑,而是將測試套件拆分給多個「執行緒」或「工作者(worker)」同時運行。這樣一來,原本需要 1000 秒的測試,如果用 10 個工作者同時執行,理論上只需要 100 秒就能完成。可想而知,平行化測試能夠大幅縮短執行時間,並且能夠讓開發者更快得到回饋,這也意味著我們在更短的時間能夠跑完成測試並且完成佈署。
Playwright 內建了強大的平行化功能,讓你可以輕鬆實踐這套心法,無需複雜的設定。
在 Playwright 中,你只需要在執行指令時加上 --workers
參數,就可以指定同時運行的工作者數量。
# 同時執行 4 個測試
npx playwright test --workers=4
# 讓 Playwright 根據硬體需求決定可以執行的 worker 數量
npx playwright test
當你執行第一個指令的時候,Playwright 會自動將你的測試套件拆分給 4 個獨立的瀏覽器實例,並且同時執行測試案例。
當測試套件大到無法在單一機器上執行,或需要跨多台機器平行執行時,測試切分(Test Sharding)就派上用場了。它能將你的測試套件精確地切分成多個部分,分配給不同的 CI/CD 機器或節點(Node)。
# 在 3 個節點中,執行第 1 個節點的測試
npx playwright test --shard=1/3
# 在 3 個節點中,執行第 2 個節點的測試
npx playwright test --shard=2/3
這個指令能確保每個節點只執行整個測試套件的一部分,從而實現跨機器的平行化。
在大型專案中,你可能只想對特定的功能進行測試。Playwright 的 Tag 功能可以讓你精準地選擇要執行的測試。
// tests/login.spec.ts
// 使用 @fast 標籤來標記快速測試
test('should login with valid credentials @fast', async ({ page }) => {
// ...
});
// tests/payment.spec.ts
// 使用 @full-regression 標籤來標記回歸測試
test('should process a successful payment @full-regression', async ({ page }) => {
// ...
});
# 執行所有帶有 @fast 標籤的測試
npx playwright test --grep "@fast"
# 排除所有帶有 @fast 標籤的測試
npx playwright test --grep-invert "@fast"
你可以將 grep
與 workers
結合,來同時執行多個特定標籤的測試,例如 npx playwright test --grep "@full-regression" --workers=8
。
平行化測試雖然強大,但並非沒有代價。如果處理不當,可能會導致測試不穩定,特別是測試案例必須要能夠獨立執行並且不能依賴於其他測試案例。
data-testid
、getByRole
),避免因為 UI 變動而導致的不穩定性。在 CI/CD 流程中,你可以將平行化測試與自動化測試結合,讓每次程式碼提交都能執行測試案例。
name: Playwright Tests
on:
push:
branches:
- main
jobs:
run-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 18.x
- name: Install dependencies
run: npm ci
- name: Install Playwright browsers
run: npx playwright install --with-deps
- name: Run Playwright tests
run: npx playwright test --workers=4
這段 YAML 程式碼能確保每次程式碼被推送到 main
分支時,都會自動執行 Playwright 測試,並使用 4 個工作者平行化運行,大幅提升了 CI/CD 的效率。
今天,我們學習了平行化測試,並透過它同時執行多個測試案例,縮短了測試套件的執行時間,是提升測試效率的關鍵。我們知道 Playwright 內建了強大的平行化功能,可以透過 --workers
參數使用。但更重要的是,我們必須確保測試獨立性、隔離測試資料、以及避免外部依賴等,這些是讓平行化測試穩定運行的基礎。掌握了如何大量平行執行測試案例,當有大量測試套件需要執行的時候,這個將不再是開發產品的痛點,而是能夠為團隊提供快速、可靠回饋的機制。